<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // let data = {
        //     name:"张三",
        //     age:20
        // }
        // // delete data['name'];
        // console.log(data);
        // data.name = "123";
        // console.log(data.age);

        // 数据观察 、 数据劫持 
        // 1.新建一个对象 ，data
        // let data = Object.defineProperty({},"name",{
        //     configurable:true, 
        //     enumerable:true,
        //     get(){
        //         console.log("获取了");
        //         return "张三";    
        //     },
        //     set(newvalue){
        //         console.log("设置了新值",newvalue);
        //     }
        // })

        // for(let key in data){
        //     console.log(key);
        // }

        // delete data['name'];
        // console.log(data);
        // console.log(data);
        // data.name = "1111";
        

        // 2.修改一个对象 为 get和set形式
        // let data = {
        //     name:"张三",
        //     age:20
        // }

        // // ES5语法 ：vue2 
        // function Observe(data){
        //     let keys = Object.keys(data);
        //     keys.forEach(key=>{
        //         let value = data[key];
        //         Object.defineProperty(data,key,{
        //             configurable:true,
        //             enumerable:true,
        //             get(){
        //                 console.log("get")
        //                 return value;
        //             },
        //             set(newvalue){
        //                 console.log("新值",newvalue);
        //                 value = newvalue;
        //             }
        //         })
        //     })
        // }
        // Observe(data);
        // console.log(data);



        // Object.defineProperty(data,"name",{
        //     configurable:true,
        //     enumerable:true,
        //     get(){
        //         console.log("get")
        //         return "张三"
        //     },
        //     set(newvalue){
        //         console.log("set",newvalue);
        //     }
        // })
        // console.log(data);


        // ES6 观察数据 ,Proxy 代理
         let data = {
            name:"张三",
            age:20
        }

        let newdata = new Proxy(data,{
            get(target,key){
                console.log("get");
                return target[key];
            },
            set(target,key,newvalue){
                console.log("set",target,key,newvalue);
                target[key] = newvalue;
            }
        });
        // console.log(newdata.name);
        // newdata.name = "11111";

    </script>
</body>
</html>